package com.pxr.setCollection;

import java.util.*;

public class TestSet {
    public static void main(String[] args) {
        test6();
    }
    public static void test1() {
        // 创建一个HashSet集合对象
        // 软件工程编程规范：面对接口的编程；
        /**
         * Set接口——Hashset  无序，不排序，不重复，可为空
         */
        Set set = new HashSet();

        //添加元素
        set.add("s");
        set.add("ss");
        set.add("asd");
        set.add(null);
        set.add("s");

        //遍历集合元素
        System.out.println("使用Iterator接口进行遍历HashSet集合的元素：");
        // 获取集合的迭代器对象
        Iterator iterator = set.iterator();
        // 使用while循环一次遍历元素值
        while (iterator.hasNext()) {
            //获取当前元素
            //String str = (String)iterator.next();
            System.out.println(" " + iterator.next());
        }
        System.out.println("使用foreach增强HashSet循环进行遍历");
        for (Object obj : set) {
            System.out.println(obj);
        }
    }

    /**
     * Set接口——LinkedHashset 有序，不排序，不重复，可为空
     */
    public static void test2() {
        // 创建一个HashSet集合对象
        // 软件工程编程规范：面对接口的编程；
        Set set = new LinkedHashSet();
        //添加元素
        set.add("zhangsan");
        set.add("zhaosi");
        set.add("zhaosi");
        set.add("wangwu");
        set.add("zhailiu");
        set.add(null);
        set.add(null);
        //遍历元素
        System.out.println("使用Iterator接口进行遍历LinkedHashSet集合的元素");
        //获取迭代器
        Iterator iterator = set.iterator();
        //使用while循环遍历元素
        while (iterator.hasNext()) {
            //取出当前元素 Objiect--String
            //String str = (String)iterator.next();
            System.out.println(iterator.next());
        }
        System.out.println("使用foreach增强型的for循环进行遍历LinkedHashSet集合的元素：");
        for (Object obj : set) {
            System.out.println(obj);
        }
    }

    /**
     * set接口——TreeSet 无序，排序，不重复，不为空
     */
    public static void test3() {
        // 创建一个HashSet集合对象
        // 软件工程编程规范：面对接口的编程
        Set set = new TreeSet();
        //添加元素
        set.add("zhangsan");
        set.add("lisi");
        set.add("wangwu");
        set.add("zhaoliu");
        set.add("zhaoliu");
        //set.add(null);
        //遍历元素
        System.out.println("使用Iterator接口进行遍历TreeSet集合的元素");
        //获取集合迭代器
        Iterator iterator = set.iterator();
        //循环遍历元素
        while (iterator.hasNext()) {
            //取出当前元素
            //String str = (String)iterator.next();
            System.out.println(iterator.next());
        }
        System.out.println("使用foreach增强型的for循环进行遍历TreeSet集合的元素：");
        for (Object obj : set) {
            System.out.println(obj);
        }
    }

    /**
     * List接口——ArrayList
     */
    public static void test4() {
        //创建一个List集合对象
        //软件工程编程规范；面对接口的编程
        List list = new ArrayList();
        //添加元素
        list.add("zhangsan");
        list.add("lisi");
        list.add("wangwu");
        list.add("zhaoliu");
        list.add("zhaoliu");
        list.add(null);
        list.add(null);
        //遍历元素
        System.out.println("使用Iterator接口进行遍历ArrayList集合的元素：");
        //获取集合元素的迭代器
        Iterator iterator = list.iterator();
        //使用while循环遍历元素
        while (iterator.hasNext()) {
            // 取出当前遍历的元素
            //String str = (String)iterator.next();
            System.out.println(iterator.next());
        }
        System.out.println("使用foreach增强型的for循环进行遍历ArrayList集合的元素：");
        for (Object obj : list) {
            System.out.println(obj);
        }

        System.out.println("使用标准for循环进行遍历ArrayList集合的元素：");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }

    /**
     * List接口——LinkedList
     */
    public static void test5() {
        //创建一个List集合对象
        //软件工程编程规范；面对接口的编程
        List list = new LinkedList();
        //添加元素
        list.add("zhangsan");
        list.add("lisi");
        list.add("wangwu");
        list.add("zhaoliu");
        list.add("zhaoliu");
        list.add(null);
        list.add(null);
        //遍历元素
        System.out.println("使用Iterator接口进行遍历LinkedList集合的元素：");
        //获取集合元素的迭代器
        Iterator iterator = list.iterator();
        //使用while循环遍历元素
        while (iterator.hasNext()) {
            // 取出当前遍历的元素
            //String str = (String)iterator.next();
            System.out.println(iterator.next());
        }
        System.out.println("使用foreach增强型的for循环进行遍历LinkedList集合的元素：");
        for (Object obj : list) {
            System.out.println(obj);
        }

        System.out.println("使用标准for循环进行遍历LinkedList集合的元素：");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }

    /**
     *map集合--hashmap
     */
    public static void test6() {
        // 创建一个hashmap实例对象
        // 面向接口的编程思想
        Map map = new HashMap();
        //增加元素
        map.put("zhangsan","10010");
        map.put("lisi","10011");
        map.put("wangwu","10012");
        map.put("zhaoliu","10013");
        map.put("zhaoliu","10014");
        map.put(null,"10010");
        map.put(null,null);
        //遍历元素
        // Map 接口提供三种collection 视图，允许以键集、值集或键-值映射关系集[entry]的形式查看某个映射的内容。【Map可以转换为Collection集合】
        // map的遍历转换为对entry键值对集合的遍历
        Set set = map.entrySet();
        //此刻就转换为对set集合的遍历
        Iterator iterator = set.iterator();
        while(iterator.hasNext()) {
            //获取set集合的entry元素的对象
            Object obj = iterator.next();
            //强制转换
            Map.Entry entry = (Map.Entry)obj;
            String strKey = (String) entry.getKey();
            Object objValue = entry.getValue();
            System.out.println(strKey+"--"+objValue);
        }

        // 增强相的foreach循环进行遍历
        // @TODO 使用foreach遍历entryset
        System.out.println("----------------");
        // 将map转换为对 key集的遍历
        Set set1 = map.keySet();
        // key的set集合的遍历
        for(Object obj:set1) {
            // obj 是 键值对中的key的值
            Object objValue = map.get(obj);
            System.out.println(obj+"--"+objValue);
        }

        // 将map转变为 value的set集合进行遍历
        Collection collection = map.values();
    }

    /**
     * map集合--LinkedHashMap
     */
    public static void test7() {
        //创建一LinkedHashMap实例对象
        //面向接口的编程思想
        Map map = new LinkedHashMap();
        //添加元素
        map.put("zhangsan", "10010");
        map.put("lisi", "10011");
        map.put("wangwu", "10012");
        map.put("zhaoliu", "10013");
        map.put("zhaoliu", "10014");
        map.put(null, "10010");
        map.put(null, null);
        // 遍历元素
        // Map 接口提供三种collection 视图，允许以键集、值集或键-值映射关系集[entry]的形式查看某个映射的内容。【Map可以转换为Collection集合】
        // map的遍历转换为对 entry键值对集合的遍历
        Set set = map.entrySet();
        // 此时就转换为对 set 集合的遍历
        Iterator iterator = set.iterator();
        while (iterator.hasNext()) {
            // 获取 set 集合的 entry元素对象
            Object obj = iterator.next();
            // 强制转换【向下溯型】
            Map.Entry entry = (Map.Entry) obj;
            String strKey = (String) entry.getKey();
            Object objValue = entry.getValue();
            System.out.println(strKey + "--" + objValue);
        }
        // 增强相的foreach循环进行遍历
        // @TODO 使用foreach遍历entryset

        System.out.println("----------------------------");
        // 将map转换为对 key集的遍历
        Set set1 = map.keySet();
        for (Object obj : set1) {
            Object objValue = map.get(obj);
            System.out.println(obj + "--" + objValue);
        }
        // 将map转变为 value的set集合进行遍历
        Collection collection = map.values();
    }

}



